package hxy.bytecode.huawei;

import org.junit.Test;

import java.util.ArrayList;
import java.util.HashSet;

/**
 * @author eric
 * @date 2020/4/18
 */
public class Lucky {
    public static void main(String[] args) {
        // 长度大于0小于1000
        String s = "aabcd";
        // 列出所有子字符串（长度是斐波那契数列的数）
        ArrayList<String> outputList = new ArrayList<>();
        // 从第一个字符到最后一个字符。注意去掉本身
        for (int i = 0; i < s.length(); i++) {
//            子字符串的长度
            for (int j = 1; j < s.length() - i; j++) {
                String substring = s.substring(i, i + j);
                // 不同字符的子串长度
                int number = number(substring);
                // 长度是斐波那契数列
                boolean fibonacci = fibonacci(number);
                if (fibonacci) {
                    //从i 开始 加上长度截取
                    outputList.add(substring);
                }
            }
        }
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("[");
        for (int i = 0; i < outputList.size(); i++) {
            String arrayCell = outputList.get(i);
            stringBuffer.append("\"").append(arrayCell).append("\"");
            if (i != outputList.size() - 1) {
                stringBuffer.append(",");
            }
        }
        stringBuffer.append("]");
        System.out.println(stringBuffer);
    }
    public static int number(String subStr) {
        HashSet<Character> hashSet = new HashSet<>(1 << 10);
        char[] chars = subStr.toCharArray();
        for (Character character : chars) {
            // TODO 可以判断是否存在
            hashSet.add(character);
        }
        return hashSet.size();
    }
    public static boolean fibonacci(Integer length) {
        // 从0开始减去，一直减下去，最后遇到为0，必然是斐波那契数，如果小于0那就不是。
        int sub = 0;
        int a1 = 0;
        int a2 = 1;
        while (length - sub > 0) {
            sub = a1 + a2;
            a1 = a2;
            a2 = sub;
        }
        if (length - sub == 0) {
            return true;
        } else {
            return false;
        }
    }
    @Test
    public void test() {
        fibonacci(9)
        ;
    }

}
